# 使用官方的 Go 语言镜像作为基础镜像
FROM registry.cn-guangzhou.aliyuncs.com/go-deploy/golang:1.23.0-alpine AS builder

# 设置工作目录为 /app
WORKDIR /app

# 将当前项目目录的所有文件拷贝到容器的 /app 目录中
COPY . .

# 设置 Go 模块代理为 https://goproxy.cn（在中国加速模块下载），并下载项目的依赖
RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod download

# 编译 Go 项目，生成可执行文件 gf-admin
RUN go build -o gf-admin

# 使用一个更小的基础镜像（Alpine）来运行应用程序
FROM registry.cn-guangzhou.aliyuncs.com/go-deploy/alpine:3.8

# 安装 tzdata 包，确保支持时区的配置
RUN apk add --no-cache tzdata

# 设置时区为上海（CST）
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 设置工作目录为 /app
WORKDIR /app

# 将编译阶段的镜像中的二进制文件复制到运行镜像中
COPY --from=builder /app/gf-admin /app/gf-admin

# 将 config.yaml 复制到容器内的 /app/config 目录
COPY /manifest/config/config.yaml /app/config/
COPY /resource/casbin/rbac_model.conf /app/resource/casbin/rbac_model.conf
COPY /resource/casbin/rbac_policy.csv /app/resource/casbin/rbac_policy.csv

# 暴露容器的 10001 端口，用于外部访问
EXPOSE 10001

# 设置容器启动时运行的命令
CMD ["/app/gf-admin"]
